|
|
|
|
|
|
|
Design and abstraction |
|
Action-oriented design |
|
Data flow analysis |
|
Transaction analysis |
|
Data-oriented design |
|
Object-oriented design |
|
Elevator problem: object-oriented design |
|
|
|
|
Formal techniques for detailed design |
|
Real-time design techniques |
|
Testing during the design phase |
|
CASE tools for the design phase |
|
Metrics for the design phase |
|
Air Gourmet Case Study: object-oriented design |
|
Challenges of the design phase |
|
|
|
|
|
Two aspects of a product |
|
Actions which operate on data |
|
Data on which actions operate |
|
The two basic ways of designing a product |
|
Action-oriented design |
|
Data-oriented design |
|
Third way |
|
Hybrid methods |
|
For example, object-oriented design |
|
|
|
|
Architectural design |
|
Detailed design |
|
Design testing |
|
|
|
|
Input: Specifications |
|
Output: Modular decomposition |
|
Abstraction |
|
|
|
|
|
Each module is designed |
|
Specific algorithms |
|
Data structures |
|
|
|
|
|
Data flow analysis |
|
When to use it |
|
With most specification methods (Structured
Systems Analysis here) |
|
Key point: Have detailed action information from
DFD |
|
|
|
|
|
|
|
Product transforms input into output |
|
Determine |
|
“Point of highest abstraction of input” |
|
“Point of highest abstract of output” |
|
|
|
|
|
Decompose into three modules |
|
Repeat stepwise until each module has high
cohesion |
|
Minor modifications may be needed to lower
coupling |
|
|
|
|
|
Example |
|
Design a product which takes as input a file
name, and returns the number of words in that file (like UNIX wc ) |
|
|
|
|
|
First refinement |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Refine modules of communicational cohesion |
|
|
|
|
Second refinement |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
All eight modules have functional cohesion |
|
|
|
|
|
Point of highest abstraction for each stream |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Continue until each module has high cohesion |
|
Adjust coupling if needed |
|
|
|
|
|
DFA poor for transaction processing products |
|
Example: ATM (Automatic Teller Machine) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Poor design |
|
Logical cohesion, control coupling |
|
|
|
|
|
|
|
Basic principle |
|
The structure of a product must conform to the
structure of its data |
|
Three very similar methods |
|
Warnier |
|
Orr |
|
Jackson |
|
Data-oriented design |
|
Has never been as popular as action-oriented
design |
|
With the rise of OOD, data-oriented design has
largely fallen out of fashion |
|
|
|
|
|
Aim |
|
Design product in terms of objects extracted
during OOA |
|
If we are using a language without inheritance
(C, Ada 83) |
|
Use abstract data type design |
|
If we are using a language without a type
statement (FORTRAN, COBOL) |
|
Use data encapsulation |
|
|
|
|
|
OOD consists of four steps: |
|
1. Construct interaction diagrams for each
scenario |
|
2. Construct the detailed class diagram |
|
3. Design the product in terms of clients of
objects |
|
4. Proceed to the detailed design |
|
|
|
|
|
Step 1.
Construct interaction diagrams for each scenario |
|
Sequence diagrams |
|
Collaboration diagrams |
|
Both show the same thing |
|
Objects and messages passed between them |
|
But in a different way |
|
|
|
|
|
|
|
|
|
|
|
Step 2.
Construct Detailed Class Diagram |
|
Do we assign an action to a class or to a client
of that class? |
|
Criteria |
|
Information hiding |
|
Reducing number of copies of action |
|
Responsibility-driven design |
|
Examples |
|
close doors is assigned to Elevator
Doors |
|
move one floor down is assigned to Elevator |
|
|
|
|
|
|
|
Step 3.
Design product in terms of clients of objects |
|
Draw an arrow from an object to a client of that
object |
|
Objects that are not clients of any object have
to be initiated, probably by the main method |
|
Additional methods may be needed |
|
|
|
|
C++ Client-object relations |
|
|
|
|
Java Client-object relations |
|
|
|
|
elevator controller needs method elevator
control loop so that main (or elevator application) can call it |
|
|
|
|
Step 4.
Perform detailed design |
|
Detailed design of method elevator controller
loop |
|
|
|
|
|
|
Implementing a complete product and then proving
it correct is hard |
|
However, use of formal techniques during
detailed design can help |
|
Correctness proving can be applied to
module-sized pieces |
|
The design should have fewer faults if it is
developed in parallel with a correctness proof |
|
If the same programmer does the detailed design
and implementation |
|
The programmer will have a positive attitude to
the detailed design |
|
Should lead to fewer faults |
|
|
|
|
|
|
Difficulties associated with real-time systems |
|
Inputs come from real world |
|
Software has no control over timing of inputs |
|
Frequently implemented on distributed software |
|
Communications implications |
|
Timing issues |
|
Problems of synchronization |
|
Race conditions |
|
Deadlock (deadly embrace) |
|
Major difficulty in design of real-time systems |
|
Determining whether the timing constraints are
met by the design |
|
|
|
|
Usually, extensions of nonreal-time methods to
real-time |
|
We have limited experience in use of any
real-time methods |
|
The state-of-the-art is not where we would like
it to be |
|
|
|
|
|
Design reviews |
|
Design must correctly reflect specifications |
|
Design itself must be correct |
|
Transaction-driven inspections |
|
|
|
|
|
|
|
UpperCASE tools |
|
Built around data dictionary |
|
Consistency checker |
|
Screen, report generators |
|
Modern tools represent OOD using UML |
|
Examples: Software through Pictures, Rose |
|
|
|
|
|
The five basic metrics |
|
Cyclomatic complexity is problematic |
|
Data complexity is ignored |
|
Little use with object-oriented paradigm |
|
|
|
|
|
OOD consists of four steps: |
|
1.
Construct interaction diagrams for each scenario |
|
2.
Construct the detailed class diagram |
|
3.
Design the product in terms of clients of objects |
|
4.
Proceed to the detailed design |
|
|
|
|
Extended scenario for making a reservation |
|
|
|
|
Sequence diagram for making a reservation |
|
|
|
|
Collaboration diagram for sending and returning
a postcard |
|
|
|
|
|
|
|
|
|
The detailed design can be found in |
|
Appendix H (for implementation in C++) |
|
Appendix I (for implementation in Java) |
|
|
|
|
|
Design team should not do too much |
|
Detailed design should not become code |
|
Design team should not do too little |
|
It is essential for the design team to produce a
complete detailed design |
|
We need to grow great designers |
|